Conversation
Vadzimz-homework-6
| [keys-to-select key-to-first coll] | ||
| (->> coll | ||
| (map #(select-keys % keys-to-select)) | ||
| (map #((fn [x key] (merge {(key x) (dissoc x key)})) % key-to-first)))) |
There was a problem hiding this comment.
Как-то сложновато выглядит. Зачем тут вложенные лямбды? Кажется, что стоит одну (fn [x] ..) оставить.
| (map (fn [[name vals]] | ||
| {name-key name | ||
| aggr-key (reduce + (map aggr-key vals))})) | ||
| (map #((fn [x key] {(key x) (dissoc x key)}) % name-key)) |
There was a problem hiding this comment.
Тоже лямбда в лямбде. Достаточно оставить (fn [x] {(name-key x) (dissoc x name-key)})
| (= x "5") (aggregate-and-filter keys-to-item-aggr item-req coll) | ||
| (= x "6") ["Good Bye\n"]) | ||
| print-result) | ||
| (if (not= x "6") (main coll) nil))) |
There was a problem hiding this comment.
Здесь when напрашивается вместо if
| (->> (cond | ||
| (= x "1") (select-data cust-keys :custID coll) | ||
| (= x "2") (select-data prod-keys :prodID coll) | ||
| (= x "3") (select-data sales-keys-to-show :salesID coll) | ||
| (= x "4") (aggregate-and-filter keys-to-cust-aggr cust-req coll) | ||
| (= x "5") (aggregate-and-filter keys-to-item-aggr item-req coll) | ||
| (= x "6") ["Good Bye\n"]) |
There was a problem hiding this comment.
Тут стоит case использовать вместо cond.
| print-result) | ||
| (if (not= x "6") (main coll) nil))) | ||
|
|
||
| (main full-data) |
There was a problem hiding this comment.
Не стоит использовать имя "main" для именования функций, которые не являются точками входа в программу, то есть не принимают строго аргументы командной строки.
Кроме того, производить какие-то побочные эффекты прямо в теле неймспейса - плохая практика. В данном случае следует объявить точку входа и настроить проект так, чтобы оная (точка входа) получала управление при выполнении команды lein run (нужно настроить :main-is).
|
|
||
|
|
||
| ;; собираем все данные в одну таблицу (список мап) | ||
| (def full-data (->> (map #(read-to-maps %1 %2) files key-names) |
There was a problem hiding this comment.
Читать какие-либо файлы при инициализации namespace не стоит, так как это явный побочный эффект. А ведь модуль может быть потенциально использован как библиотека, а не только как самостоятельная программа - в этом случае безусловное чтение файлов будет мешать.
А ещё подобные программы перечитывают файлы при каждом запросе от пользователя, ведь общение с последним происходит в диалоговом режиме, а в процессе диалога данные на диске могут и измениться. Кроме того не стоит обращаться к диску за теми данными, которые пользователю не нужны: как только попросит, тогда и следует нужные файлы читать.
|
По домашней работе №6 оставил сколько-то замечаний, но они в известной степени стилистические, так что саму работу зачитываю. |
No description provided.